#include "wx/wxprec.h"
#if wxUSE_FILEPICKERCTRL || wxUSE_DIRPICKERCTRL

#include "wx/filepicker.h"


// ============================================================================
// implementation
// ============================================================================

IMPLEMENT_DYNAMIC_CLASS( wxGenericFileButton, wxButton )
IMPLEMENT_DYNAMIC_CLASS( wxGenericDirButton, wxButton )

// ----------------------------------------------------------------------------
// wxGenericFileButton
// ----------------------------------------------------------------------------

bool wxGenericFileDirButton::Create( wxWindow *parent, wxWindowID id,
                                     const wxString &label, const wxString &path,
                                     const wxString &message, const wxString &wildcard,
                                     const wxPoint &pos, const wxSize &size, long style,
                                     const wxValidator& validator, const wxString &name ) {
  // create this button
  if( !wxButton::Create( parent, id, label, pos, size, style,
                         validator, name ) ) {
    wxFAIL_MSG( wxT( "wxGenericFileButton creation failed" ) );
    return false;
  }
  // and handle user clicks on it
  Connect( GetId(), wxEVT_COMMAND_BUTTON_CLICKED,
           wxCommandEventHandler( wxGenericFileDirButton::OnButtonClick ),
           NULL, this );
  // create the dialog associated with this button
  m_path = path;
  m_message = message;
  m_wildcard = wildcard;
  return true;
}

void wxGenericFileDirButton::OnButtonClick( wxCommandEvent& ( ev ) ) {
  wxDialog *p = CreateDialog();
  if( p->ShowModal() == wxID_OK ) {
    // save updated path in m_path
    UpdatePathFromDialog( p );
    // fire an event
    wxFileDirPickerEvent event( GetEventType(), this, GetId(), m_path );
    GetEventHandler()->ProcessEvent( event );
  }
  wxDELETE( p );
}

#endif      // wxUSE_FILEPICKERCTRL || wxUSE_DIRPICKERCTRL
